package com.universest.swordholder.data.dao

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Entity
import androidx.room.Index
import androidx.room.Insert
import androidx.room.PrimaryKey
import androidx.room.Query
import androidx.room.Update
import kotlinx.coroutines.flow.Flow

// 指定表名（如果类名与表名一致可省略）
@Entity(
    tableName = "user",
    indices = [Index(value = ["userName"], unique = true)]
)
data class User(
    // 主键（userId）
    @PrimaryKey(autoGenerate = true) val userId: Int = 0,
    // 用户名（新增字段，唯一）
    val userName: String,
    // 昵称
    val nickName: String,
    // 密码
    val password: String
)

@Dao
interface UserDao {
    // 添加用户（如果主键已存在会抛出异常，如需替换可使用@Insert(onConflict = OnConflictStrategy.REPLACE)）
    @Insert
    suspend fun addUser(user: User): Long

    // 根据userId查询用户（返回Flow，当数据变化时自动通知UI）
    @Query("SELECT * FROM user WHERE userId = :userId")
    fun getUserById(userId: Int): Flow<User?>

    // 根据userName查询用户（新增）
    @Query("SELECT * FROM user WHERE userName = :userName")
    fun getUserByUserName(userName: String): Flow<User?>

    // 查询所有用户（按userId升序）
    @Query("SELECT * FROM user ORDER BY userId ASC")
    fun getAllUsers(): Flow<List<User>>

    // 更新用户信息（根据主键匹配）
    @Update
    suspend fun updateUser(user: User)

    // 删除用户（根据主键匹配）
    @Delete
    suspend fun deleteUser(user: User)

    // 可选：根据userId删除（自定义SQL）
    @Query("DELETE FROM user WHERE userId = :userId")
    suspend fun deleteUserById(userId: Int)
}